package io.github.talelin.latticy.dto.rule.chargeItem;

import io.github.talelin.latticy.common.enumeration.*;
import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Positive;
import java.math.BigDecimal;
import java.util.List;

/**
 * @authoer:wulongbo
 * @createDate:2022/8/24
 * @description:
 */
@Data
public class ChargeItemDTO {

    /**
     * 计费项名称
     */
    @NotBlank(message = "{charge.name.not-blank}")
    private String name;

    /**
     * 计费项类型（1：入库管理；2：出库管理；3：退货管理）
     */
    private FeesBizTypeEnum feesBizType;

    /**
     * 计费维度 （1：按整单来算；2：按每箱来算；3：按每种sku来算）
     */
    private LevelEnum level;

    /**
     * 单据类型（[1,1]:[入库管理:所有的入库];[1,2]:[入库管理:入库&转运];[1,3]:[入库管理:仅入库];[1,4]:[入库管理:仅转运];
     * [2,1]:[出库管理:小包出库];[2,2]:[出库管理:大货出库]；
     * [3,1]:[退货管理:所有的退货];[3,2]:[退货管理:小包退货];[3,3]:[退货管理:FBA退货]）
     */
    @Min(value = 1, message = "{charge.billType.min}")
    @Max(value = 4, message = "{charge.billType.max}")
    @Positive(message = "{charge.billType.positive}")
    private Integer billType;

    /**
     * 计费单位(重量) 1：kg ；2：lb/oz
     */
    private WeightEnum weight;

    /**
     * 计费单位(体积) 1：CBM ；2：CBF
     */
    private SizeEnum size;

    /**
     * 计费模式（1：及时核销，2：事后核销）
     */
    private ModelEnum model;

    /**
     * 基础费用
     */
    private BigDecimal baseCost;

    /**
     * 描述
     */
    private String describe;

    @Valid
    private List<ChargeConditionDTO> conditionList;

    @Valid
    private List<ChargeAbsoluteDTO> absoluteList;
}
